# 列表可修改、支持重复元素且有序
# 元组、字符串不可修改、支持重复元素且有序
# 局限就在于：它们都支持重复元素
# 如果场景需要对内容做去重处理，列表、元组、字符串就不方便了
# 而集合，最主要的特点就是：不支持元素的重复(自带去重功能)、并且内容无序
# 定义集合字面量:
# {元素,元素,......,元素}
# 定义集合变量:
# 变量名称 = {元素,元素,......,元素}
# 定义空集合：
# 变量名称 = set() #注意{}不为空集合而是默认表示空字典
# 首先，因为集合是无序的，所以集合不支持：索引(下标)和切片的操作
# 但是集合和列表一样，是允许修改的
# 定义集合：
my_set = {'传智教育','黑马程序员','itheima','传智教育','黑马程序员','itheima','传智教育','黑马程序员','itheima'}
print(f'my_set的内容是{my_set},类型是{type(my_set)}')
my_set.add('python')#添加新元素
my_set.add('传智教育')#如果元素已经存在，则此操作无效
print(my_set)
my_set.remove('黑马程序员')#删除指定的元素
print(my_set)
element = my_set.pop()#随机删除一个元素，并返回该元素让你能够接着使用它
print(f'集合被删除的元素是{element},取出元素后{my_set}')
my_set.clear()#清空集合内容
print(f'集合清空后的结果是{my_set}')
# 取出两个或多个集合的差集
# 语法：集合1.difference(集合2)，功能：取出集合1和集合2的差集（集合1有而集合2没有）
# 结果：得到一个新集合，集合1和集合2不变
set1 = {1,2,3}
set2 = {1,5,6}
set3 = set1.difference(set2)
print(f'取出的差集{set3}，原set1结果{set1}，原set2结果{set2}')
# 消除两个集合的交集
# 语法：集合1.difference_update(集合2),功能：对比集合1和集合2，在集合1内，删除和集合2相同的元素
# 结果：集合1被修改，集合2不变
set1.difference_update(set2)
print(f'消除交集后集合1的结果{set1}，集合2的结果{set2}')
# 2个集合合并
# 语法：集合1.union(集合2),功能：将集合1和集合2组合成新集合
# 结果：得到新集合，集合1和集合2不变
set1 = {1,2,3}
set2 = {1,5,6}
set3 = set1.union(set2)
print(f'合并后的结果{set3},集合1{set1},集合2{set2}')
print(len(set3))#len函数可以返回对象中的元素个数，从1开始计算(集合长度)
# 由于集合不支持下标(索引)，不能通过索引用while循环遍历，可以用for循环遍历
for i in set3:
    print(f'集合的元素有{i}')
